common.skill

বেসিক LINQ অপারেশন (Basic LINQ Operations)

Microsoft Technologies - লিংক (LinQ)
201
201

LINQ (Language Integrated Query) ডেটা কুয়েরি এবং ম্যানিপুলেশনের জন্য একটি শক্তিশালী টুল। LINQ এর মাধ্যমে আপনি বিভিন্ন ধরনের ডেটা সোর্স যেমন ইন-মেমোরি অবজেক্ট, SQL ডেটাবেস, XML, বা DataSet থেকে ডেটা কুয়েরি করতে পারেন। এখানে আমরা কিছু বেসিক LINQ অপারেশন সম্পর্কে আলোচনা করবো, যেগুলি সাধারণত ব্যবহার করা হয়।


Where (ফিল্টারিং ডেটা)

Where অপারেশন ব্যবহার করে আপনি ডেটা সোর্স থেকে নির্দিষ্ট শর্তের ভিত্তিতে ডেটা ফিল্টার করতে পারেন। এটি প্রাথমিকভাবে ডেটার মধ্যে শর্তসাপেক্ষ ফিল্টারিং করার জন্য ব্যবহৃত হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Where অপারেশন ব্যবহার করে even সংখ্যাগুলো বের করা
var evenNumbers = numbers.Where(n => n % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে Where ব্যবহার করে সংখ্যাগুলোর মধ্যে শুধুমাত্র even numbers ফিল্টার করা হয়েছে।


Select (ডেটা নির্বাচন)

Select অপারেশন ব্যবহার করে আপনি ডেটা সোর্স থেকে কিছু নির্দিষ্ট ডেটা বা প্রপার্টি নির্বাচন করতে পারেন। এটি সাধারণত ডেটার ট্রান্সফর্মেশনের জন্য ব্যবহৃত হয়।

উদাহরণ:

List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David" };

// Select অপারেশন ব্যবহার করে নামের প্রথম অক্ষর বের করা
var initials = names.Select(name => name[0]);

foreach (var initial in initials)
{
    Console.WriteLine(initial);  // Output: A, B, C, D
}

এখানে Select ব্যবহার করে নামের প্রথম অক্ষর বের করা হয়েছে।


OrderBy (অর্ডারিং ডেটা)

OrderBy অপারেশন ব্যবহার করে ডেটা সোর্সকে একটি নির্দিষ্ট শর্তের ভিত্তিতে অর্ডার বা সাজানো যায়। এটি সাধারণত অক্ষরিক বা সংখ্যাগত মানের ভিত্তিতে ডেটা সাজানোর জন্য ব্যবহৃত হয়।

উদাহরণ:

List<int> numbers = new List<int> { 5, 1, 8, 3, 9, 4 };

// OrderBy অপারেশন ব্যবহার করে ছোট থেকে বড় সংখ্যায় সাজানো
var sortedNumbers = numbers.OrderBy(n => n);

foreach (var num in sortedNumbers)
{
    Console.WriteLine(num);  // Output: 1, 3, 4, 5, 8, 9
}

এখানে OrderBy ব্যবহার করে সংখ্যাগুলোর ascending order-এ সাজানো হয়েছে।


GroupBy (গ্রুপিং ডেটা)

GroupBy অপারেশন ব্যবহার করে ডেটা সোর্সের ডেটাগুলিকে একটি বা একাধিক প্রপার্টির ভিত্তিতে গ্রুপ করা যায়। এটি একটি শক্তিশালী অপারেশন যা ডেটার গ্রুপিং বা ক্যাটেগরি তৈরির জন্য ব্যবহৃত হয়।

উদাহরণ:

List<string> fruits = new List<string> { "Apple", "Banana", "Orange", "Apple", "Banana" };

// GroupBy অপারেশন ব্যবহার করে ফলগুলিকে গ্রুপ করা
var groupedFruits = fruits.GroupBy(fruit => fruit);

foreach (var group in groupedFruits)
{
    Console.WriteLine($"{group.Key}: {group.Count()}");  // Output: Apple: 2, Banana: 2, Orange: 1
}

এখানে GroupBy ব্যবহার করে ফলগুলিকে গ্রুপ করা হয়েছে এবং প্রতিটি ফলের গুনতি বের করা হয়েছে।


First (প্রথম উপাদান নির্বাচন)

First অপারেশন ব্যবহার করে আপনি একটি ডেটা সোর্সের প্রথম উপাদান বা শর্ত পূরণকারী প্রথম উপাদান নির্বাচন করতে পারেন। এটি সাধারণত সেই ক্ষেত্রে ব্যবহৃত হয় যখন আপনি ডেটা থেকে প্রথম মান চান।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// First অপারেশন ব্যবহার করে প্রথম even number নির্বাচন করা
var firstEvenNumber = numbers.First(n => n % 2 == 0);

Console.WriteLine(firstEvenNumber);  // Output: 2

এখানে First ব্যবহার করে প্রথম even number বের করা হয়েছে।


Sum (যোগফল)

Sum অপারেশন ব্যবহার করে আপনি একটি ডেটা সোর্সের সমস্ত উপাদানের যোগফল বের করতে পারেন। এটি সাধারণত সংখ্যামূলক ডেটা যেমন ইন্টিজার, ডাবল, ফ্লোট ইত্যাদির সাথে ব্যবহৃত হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// Sum অপারেশন ব্যবহার করে সকল সংখ্যার যোগফল বের করা
var total = numbers.Sum();

Console.WriteLine(total);  // Output: 15

এখানে Sum ব্যবহার করে সংখ্যাগুলির যোগফল বের করা হয়েছে।


Any (শর্ত পূরণকারী উপাদান আছে কিনা চেক করা)

Any অপারেশন ব্যবহার করে আপনি ডেটা সোর্সে কোনো শর্ত পূরণকারী উপাদান আছে কিনা তা চেক করতে পারেন। এটি সাধারণত ডেটার মধ্যে কোনো উপাদান বিদ্যমান কিনা তা জানার জন্য ব্যবহৃত হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// Any অপারেশন ব্যবহার করে চেক করা যে 4 এর চেয়ে বড় কোনো সংখ্যা আছে কিনা
var exists = numbers.Any(n => n > 4);

Console.WriteLine(exists);  // Output: True

এখানে Any ব্যবহার করে চেক করা হয়েছে যে 4 এর চেয়ে বড় কোনো সংখ্যা আছে কিনা।


Distinct (অনুলিপি উপাদান বাদ দেওয়া)

Distinct অপারেশন ব্যবহার করে আপনি ডুপ্লিকেট উপাদান বাদ দিতে পারেন। এটি ডেটা সোর্স থেকে অনুলিপি উপাদানগুলি সরিয়ে ফেলতে সহায়ক।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 2, 3, 4, 4, 5 };

// Distinct অপারেশন ব্যবহার করে অনুলিপি উপাদান বাদ দেওয়া
var distinctNumbers = numbers.Distinct();

foreach (var num in distinctNumbers)
{
    Console.WriteLine(num);  // Output: 1, 2, 3, 4, 5
}

এখানে Distinct ব্যবহার করে ডুপ্লিকেট সংখ্যাগুলো বাদ দেওয়া হয়েছে।


সারাংশ

LINQ-এর মাধ্যমে ডেটা সোর্সে বিভিন্ন ধরনের অপারেশন যেমন ফিল্টারিং, সজ্জা, গ্রুপিং, যোগফল, অনুলিপি বাদ দেওয়া ইত্যাদি সহজেই করা যায়। LINQ অপারেশনগুলি ডেভেলপারদের ডেটা ম্যানিপুলেশনকে আরও সহজ এবং পরিষ্কার করে তোলে, যা কোডের রিডেবিলিটি এবং রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করে।

common.content_added_by

LINQ Query তৈরি এবং রান করা

173
173

LINQ (Language Integrated Query) ব্যবহার করে ডেটা কুয়েরি তৈরি এবং রান করার প্রক্রিয়া সহজ এবং পরিষ্কার। LINQ এর মাধ্যমে, আপনি .NET ভাষা (যেমন C# বা VB.NET) ব্যবহার করে বিভিন্ন ডেটা সোর্সে কুয়েরি লিখতে পারেন। এটি ডেটাবেস, ইন-মেমোরি অবজেক্ট, XML, DataSet ইত্যাদি বিভিন্ন ধরনের ডেটা সোর্সের উপর কার্যকরী।

LINQ কুয়েরি তৈরি করতে এবং রান করার জন্য কিছু প্রধান পদক্ষেপ নিচে বর্ণনা করা হলো:


LINQ Query তৈরি করা

LINQ কুয়েরি তৈরি করার জন্য Query Syntax এবং Method Syntax দুটি পদ্ধতি ব্যবহার করা যায়। আমরা এই দুটি পদ্ধতিতে কুয়েরি লেখার উদাহরণ দেখবো।

Query Syntax

Query Syntax SQL-এর মতোই দেখতে হয় এবং এটি একটি ডিক্লারেটিভ পদ্ধতি। কুয়েরি তৈরির জন্য মূলত from, where, select ইত্যাদি কীওয়ার্ড ব্যবহার করা হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Query Syntax ব্যবহার করে even numbers বের করা
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে numbers লিস্টের মধ্যে যেসব সংখ্যা even (জোড়) তাদের বের করা হয়েছে।

Method Syntax

Method Syntax একটি ফাংশনাল পদ্ধতি, যেখানে LINQ মেথড (যেমন Where(), Select(), OrderBy() ইত্যাদি) ব্যবহার করা হয়। এটি খুবই শক্তিশালী এবং সাধারণত Lambda Expressions ব্যবহার করা হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Method Syntax ব্যবহার করে even numbers বের করা
var evenNumbers = numbers.Where(num => num % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে Where() মেথডের মাধ্যমে even numbers বের করা হয়েছে, যেখানে Lambda Expression (num => num % 2 == 0) ব্যবহার করা হয়েছে।


LINQ Query রান করা

LINQ কুয়েরি রান করা অর্থাৎ কুয়েরি এক্সিকিউট করা হয় যখন তার ফলাফল প্রয়োজন হয়। LINQ কুয়েরি সাধারণত Deferred Execution সমর্থন করে, অর্থাৎ কুয়েরি তখনই এক্সিকিউট হবে যখন তার ফলাফল অ্যাক্সেস করা হবে।

Deferred Execution

এটা LINQ এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যেখানে কুয়েরি লেখার পর তা তখনই কার্যকর হয় যখন তার ফলাফল প্রয়োজন হয়, যেমন foreach লুপে কুয়েরি ব্যবহার করার সময়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Deferred Execution: কুয়েরি তখনই এক্সিকিউট হবে যখন ফলাফল প্রয়োজন
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

// কুয়েরি এক্সিকিউট করা
foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে evenNumbers কুয়েরি লেখার পর তা এক্সিকিউট হবে foreach লুপের মধ্যে।

Immediate Execution

Immediate Execution এর মাধ্যমে কুয়েরি তখনই এক্সিকিউট হয় যখন তা সরাসরি ফলাফল দেয়, যেমন ToList(), Count(), First() ইত্যাদি ব্যবহার করা হলে কুয়েরি ফলাফল আসলেই এক্সিকিউট হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Immediate Execution: কুয়েরি এক্সিকিউট হবে এখনই
var evenNumbersList = numbers.Where(num => num % 2 == 0).ToList();

foreach (var num in evenNumbersList)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে ToList() মেথড ব্যবহার করা হয়েছে, যা কুয়েরি লেখার সাথে সাথে তা এক্সিকিউট করে List আকারে ফলাফল প্রদান করে।


LINQ Query এর ফলাফল প্রসেসিং

একবার কুয়েরি রান হলে, আপনি তার ফলাফলগুলি বিভিন্নভাবে প্রসেস করতে পারেন। এখানে বিভিন্ন কৌশল ব্যবহার করা হতে পারে, যেমন:

  • First() / FirstOrDefault(): প্রথম রেকর্ড পাওয়া বা null ফেরত দেয়া।
  • Count(): ফলাফলের সংখ্যা গণনা করা।
  • Sum(): ফলাফলের উপর গণনা করা (যেমন যোগফল)।
  • Average(): গড় মান বের করা।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Count() ব্যবহার করে even numbers এর সংখ্যা বের করা
var countEven = numbers.Count(num => num % 2 == 0);

Console.WriteLine("Number of even numbers: " + countEven);  // Output: 5

// Sum() ব্যবহার করে even numbers এর যোগফল বের করা
var sumEven = numbers.Where(num => num % 2 == 0).Sum();
Console.WriteLine("Sum of even numbers: " + sumEven);  // Output: 30

এখানে Count() এবং Sum() মেথড ব্যবহার করা হয়েছে, যা even numbers এর সংখ্যা এবং যোগফল বের করেছে।


LINQ Query এর ফলাফল সাজানো

LINQ তে ফলাফল সাজানোর জন্য OrderBy() এবং OrderByDescending() মেথড ব্যবহার করা হয়। এগুলি যথাক্রমে ascending (বৃদ্ধি) এবং descending (হ্রাস) অর্ডারে ফলাফল সাজায়।

উদাহরণ:

List<int> numbers = new List<int> { 10, 3, 7, 4, 1, 8, 5 };

// OrderBy() ব্যবহার করে ascending অর্ডারে সাজানো
var sortedNumbers = numbers.OrderBy(num => num);

foreach (var num in sortedNumbers)
{
    Console.WriteLine(num);  // Output: 1, 3, 4, 5, 7, 8, 10
}

// OrderByDescending() ব্যবহার করে descending অর্ডারে সাজানো
var sortedNumbersDesc = numbers.OrderByDescending(num => num);

foreach (var num in sortedNumbersDesc)
{
    Console.WriteLine(num);  // Output: 10, 8, 7, 5, 4, 3, 1
}

এখানে OrderBy() এবং OrderByDescending() ব্যবহার করে ascending এবং descending অর্ডারে ফলাফল সাজানো হয়েছে।


সারাংশ

LINQ কুয়েরি তৈরি এবং রান করা খুবই সহজ এবং কার্যকর। LINQ এর মাধ্যমে ডেটা কুয়েরি লেখার দুটি প্রধান পদ্ধতি হল Query Syntax এবং Method SyntaxDeferred Execution এবং Immediate Execution এর মাধ্যমে LINQ কুয়েরি এক্সিকিউশন কন্ট্রোল করা যায়। LINQ কুয়েরির মাধ্যমে ডেটা প্রসেস করা, সাজানো এবং গণনা করা যায় খুবই সহজ এবং পরিষ্কারভাবে, যা কোডের রিডেবিলিটি এবং কার্যকারিতা উন্নত করে।

common.content_added_by

ফিল্টারিং ডেটা (Where ক্লজ ব্যবহার)

179
179

LINQ এর Where ক্লজ ব্যবহার করে আপনি ডেটার মধ্যে একটি নির্দিষ্ট শর্ত পূর্ণকারী উপাদানগুলি ফিল্টার করতে পারেন। এটি একটি সাধারণ এবং শক্তিশালী ফিচার, যা কোডে শর্ত দিয়ে নির্দিষ্ট ডেটা বের করার জন্য ব্যবহৃত হয়। Where ক্লজ সাধারণত কোনো কন্ডিশন বা শর্ত (যেমন সংখ্যা, স্ট্রিং বা অন্য যেকোনো ভ্যালু) নির্ধারণ করার মাধ্যমে ডেটা ফিল্টার করার জন্য ব্যবহার করা হয়।

Where ক্লজ এর মাধ্যমে আপনি ডেটাসেট থেকে এক বা একাধিক শর্তের ভিত্তিতে প্রয়োজনীয় ডেটা নির্বাচন করতে পারবেন। এটি Method Syntax এবং Query Syntax উভয় পদ্ধতিতেই ব্যবহৃত হতে পারে।


Where ক্লজ ব্যবহার (Query Syntax)

Query Syntax ব্যবহার করে Where ক্লজের মাধ্যমে ডেটা ফিল্টার করা খুবই সহজ। যেখানে from এবং where এর মধ্যে শর্ত দেওয়া হয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Even numbers বের করা
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে Where ক্লজটি num % 2 == 0 শর্তের মাধ্যমে even numbers বের করার জন্য ব্যবহৃত হয়েছে।


Where ক্লজ ব্যবহার (Method Syntax)

Method Syntax এর মাধ্যমে Where মেথড ব্যবহার করা হয়। এটি LINQ Method Syntax এর অংশ এবং কোডটি আরও компакт এবং সংক্ষিপ্ত করে।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// Even numbers বের করা
var evenNumbers = numbers.Where(num => num % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);  // Output: 2, 4, 6, 8, 10
}

এখানে Where(num => num % 2 == 0) মেথডটি ফিল্টারিংয়ের জন্য ব্যবহৃত হয়েছে, যেখানে Lambda Expression এর মাধ্যমে শর্ত দেওয়া হয়েছে।


Where ক্লজের মাধ্যমে একাধিক শর্ত ফিল্টার করা

Where ক্লজ ব্যবহার করে একাধিক শর্ত দিয়েও ডেটা ফিল্টার করা যায়। এটি AND বা OR শর্ত দিয়ে করা হতে পারে।

উদাহরণ (Multiple conditions using AND):

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 5 এর বেশি এবং even সংখ্যা বের করা
var result = numbers.Where(num => num > 5 && num % 2 == 0);

foreach (var num in result)
{
    Console.WriteLine(num);  // Output: 6, 8, 10
}

এখানে দুটি শর্ত দেয়া হয়েছে: num > 5 এবং num % 2 == 0 (অর্থাৎ সংখ্যা ৫ এর বেশি এবং even হতে হবে)।

উদাহরণ (Multiple conditions using OR):

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 5 এর বেশি অথবা odd সংখ্যা বের করা
var result = numbers.Where(num => num > 5 || num % 2 != 0);

foreach (var num in result)
{
    Console.WriteLine(num);  // Output: 1, 3, 5, 6, 7, 8, 9, 10
}

এখানে OR condition দেওয়া হয়েছে: num > 5 অথবা num % 2 != 0 (অর্থাৎ সংখ্যা ৫ এর বেশি অথবা odd হতে হবে)।


Where ক্লজে ব্যবহার করা শর্তের ধরন

Where ক্লজে যেকোনো ধরনের শর্ত ব্যবহার করা যেতে পারে:

  • অথবা সমীকরণ: (এবং, অথবা)
  • সংখ্যার শর্ত: (বড়, ছোট, সমান, বিভাজ্য)
  • স্ট্রিং শর্ত: (মানের তুলনা, শুরু, শেষ, ভিতরে ইত্যাদি)
  • কাস্টম শর্ত: (যেকোনো ব্যবহারকারী-সংজ্ঞায়িত শর্ত)

উদাহরণ (String comparison):

List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David", "Eve" };

// "A" অক্ষর দিয়ে শুরু হওয়া নামগুলি বের করা
var result = names.Where(name => name.StartsWith("A"));

foreach (var name in result)
{
    Console.WriteLine(name);  // Output: Alice
}

এখানে StartsWith("A") ব্যবহার করা হয়েছে স্ট্রিংয়ের শুরুতে "A" অক্ষর থাকা নামগুলো বের করার জন্য।


Where ক্লজের কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য

  • Deferred Execution: Where ক্লজের ব্যবহার Deferred Execution সমর্থন করে, যা ডেটা কুয়েরি লেখার পর কেবল তখনই কার্যকর হয় যখন তার ফলাফল প্রয়োজন হয়।
  • Lazy Evaluation: যখন ডেটা ফিল্টার করা হয়, তখন Lazy Evaluation ঘটে। অর্থাৎ কেবলমাত্র ফিল্টার করা ডেটার উপরই কাজ করা হয়, পুরো ডেটাসেটের উপর নয়।
  • Performance Optimization: একাধিক শর্তের মাধ্যমে ডেটা ফিল্টার করার সময় LINQ নিজেই অপ্রয়োজনীয় ডেটাকে বাদ দিয়ে কাজ করে, যার ফলে পারফরম্যান্সের উন্নতি হয়।

সারাংশ

Where ক্লজ একটি শক্তিশালী LINQ ফিচার যা ডেটা ফিল্টার করার জন্য ব্যবহৃত হয়। এটি Query Syntax এবং Method Syntax উভয়ই ব্যবহৃত হতে পারে এবং বিভিন্ন শর্তের ভিত্তিতে ডেটা কুয়েরি এবং নির্বাচন করতে সক্ষম। LINQ এর মাধ্যমে ডেটা ফিল্টারিং খুবই সহজ এবং কার্যকরী হয়, যা কোডের রিডেবিলিটি এবং পারফরম্যান্সের উন্নতি করতে সাহায্য করে।

common.content_added_by

সিলেক্ট অপারেশন (Select ক্লজ)

177
177

LINQ এর Select ক্লজ একটি অত্যন্ত গুরুত্বপূর্ণ এবং জনপ্রিয় অপারেশন যা একটি সংগ্রহ থেকে নির্দিষ্ট উপাদান নির্বাচন করতে ব্যবহৃত হয়। Select ক্লজটি মূলত Projection Operation হিসাবে কাজ করে, যার মাধ্যমে আপনি একটি নতুন ডেটা সংগ্রহ তৈরি করতে পারেন যা মূল সংগ্রহের এক বা একাধিক উপাদান থেকে নির্বাচিত বা রূপান্তরিত তথ্য ধারণ করে।

Select ক্লজের মাধ্যমে আপনি:

  • একটি নির্দিষ্ট প্রোপার্টি বা ফিল্ড নির্বাচন করতে পারেন।
  • কোনো কাস্টম অবজেক্ট বা টাইপ তৈরি করতে পারেন।
  • ডেটার মান পরিবর্তন বা রূপান্তর করতে পারেন।

Select ক্লজ ব্যবহার (Query Syntax)

Query Syntax-এ select কিওয়ার্ড ব্যবহার করে আপনি ডেটা নির্বাচন করেন। এখানে ডেটার উপর কোনো পরিবর্তন বা ফিল্টার প্রয়োগ করতে পারেন এবং নতুন ডেটা গঠন করতে পারেন।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

// প্রতি সংখ্যার গুণফল বের করা
var squares = from num in numbers
              select num * num;

foreach (var square in squares)
{
    Console.WriteLine(square);  // Output: 1, 4, 9, 16, 25, 36
}

এখানে, select ক্লজটি num * num করে প্রতিটি সংখ্যা থেকে তার গুণফল বের করেছে।


Select ক্লজ ব্যবহার (Method Syntax)

Method Syntax-এ Select() মেথড ব্যবহার করা হয়, যা LINQ এর এক ধরনের ফাংশনাল স্টাইল। এটি Lambda Expressions ব্যবহার করে ডেটা নির্বাচন ও রূপান্তর করার সুবিধা দেয়।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

// প্রতি সংখ্যার গুণফল বের করা
var squares = numbers.Select(num => num * num);

foreach (var square in squares)
{
    Console.WriteLine(square);  // Output: 1, 4, 9, 16, 25, 36
}

এখানে, Select(num => num * num) মাধ্যমে প্রতিটি সংখ্যা তার গুণফলে রূপান্তরিত হয়েছে।


Select ক্লজে কাস্টম অবজেক্ট তৈরি

Select ক্লজ ব্যবহার করে আপনি নতুন কাস্টম অবজেক্ট তৈরি করতে পারেন, যা মূল অবজেক্টের প্রোপার্টি বা ফিল্ডের ভিত্তিতে নির্মিত হয়।

উদাহরণ:

List<Person> people = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Charlie", Age = 35 }
};

// কাস্টম অবজেক্ট তৈরি
var selectedPeople = people.Select(p => new { p.Name, AgeInFiveYears = p.Age + 5 });

foreach (var person in selectedPeople)
{
    Console.WriteLine($"Name: {person.Name}, Age in 5 years: {person.AgeInFiveYears}");
}

এখানে, Select ক্লজের মাধ্যমে একটি নতুন anonymous object তৈরি করা হয়েছে, যেখানে Name এবং AgeInFiveYears (এলিয়াস হিসেবে) ফিল্ড রয়েছে।


Select ক্লজের মাধ্যমে Nested ডেটা নির্বাচন

Select ক্লজ ব্যবহার করে আপনি একাধিক স্তরের (nested) ডেটা নির্বাচন করতে পারেন। এই পদ্ধতিতে একটি ডেটা অবজেক্টের মধ্যে থাকা অন্য ডেটা অবজেক্ট বা সংগ্রহের তথ্য নির্বাচন করা হয়।

উদাহরণ:

List<Order> orders = new List<Order>
{
    new Order { OrderId = 1, Customer = "Alice", Items = new List<string> { "Item1", "Item2" } },
    new Order { OrderId = 2, Customer = "Bob", Items = new List<string> { "Item3", "Item4" } },
    new Order { OrderId = 3, Customer = "Charlie", Items = new List<string> { "Item5", "Item6" } }
};

// প্রতিটি অর্ডারের আইটেমসমূহ নির্বাচন করা
var orderItems = orders.Select(o => new { o.Customer, Items = string.Join(", ", o.Items) });

foreach (var order in orderItems)
{
    Console.WriteLine($"Customer: {order.Customer}, Items: {order.Items}");
}

এখানে Order ক্লাসের মধ্যে থাকা Items নামক লিস্ট থেকে প্রতিটি অর্ডারের আইটেমগুলো একত্রিত করে একটি নতুন তথ্য তৈরি করা হয়েছে।


Select ক্লজের মাধ্যমে স্ট্রিং রূপান্তর (String Transformation)

Select ক্লজ ব্যবহার করে আপনি স্ট্রিং ডেটার মধ্যে রূপান্তর করতে পারেন, যেমন স্ট্রিংয়ের অক্ষর পরিবর্তন বা স্ট্রিংয়ের অংশ নির্বাচন।

উদাহরণ:

List<string> names = new List<string> { "alice", "bob", "charlie" };

// নামগুলো বড় হাতের অক্ষরে রূপান্তর করা
var upperNames = names.Select(name => name.ToUpper());

foreach (var name in upperNames)
{
    Console.WriteLine(name);  // Output: ALICE, BOB, CHARLIE
}

এখানে, প্রতিটি নামকে uppercase এ রূপান্তর করা হয়েছে Select ক্লজের মাধ্যমে।


Select ক্লজের মাধ্যমে সংখ্যা গণনা (Count Calculation)

Select ক্লজ ব্যবহার করে আপনি ডেটার উপর ভিত্তি করে গণনা বা মোট কিছু হিসাব করতে পারেন।

উদাহরণ:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

// সংখ্যাগুলোর মোট যোগফল বের করা
var totalSum = numbers.Select(num => num).Sum();

Console.WriteLine(totalSum);  // Output: 21

এখানে, Select(num => num) থেকে সমস্ত সংখ্যা নির্বাচন করে তাদের যোগফল বের করা হয়েছে।


সারাংশ

Select ক্লজ LINQ এর একটি গুরুত্বপূর্ণ ফিচার, যা ডেটাকে ফিল্টার বা রূপান্তর করার জন্য ব্যবহৃত হয়। এটি ব্যবহারে ডেটার একাধিক শর্ত, কাস্টম অবজেক্ট তৈরি, এবং সংখ্যার বা স্ট্রিংয়ের উপর রূপান্তর করা সহজ এবং কার্যকর হয়।

common.content_added_by

অর্ডারিং (OrderBy, OrderByDescending)

167
167

LINQ-এ অর্ডারিং কুয়েরি অপারেশন ডেটাকে নির্দিষ্ট ক্রমে সাজানোর জন্য ব্যবহৃত হয়। OrderBy এবং OrderByDescending হল দুটি প্রধান LINQ অপারেটর যা ডেটাকে যথাক্রমে Ascending (বৃদ্ধি) বা Descending (হ্রাস) অর্ডারে সাজাতে ব্যবহৃত হয়।


OrderBy

OrderBy কুয়েরি অপারেটর ডেটাকে Ascending Order বা ছোট থেকে বড় (কম থেকে বেশি) সাজানোর জন্য ব্যবহৃত হয়। এটি সাধারণত সংখ্যার বা অক্ষরের ক্রম অনুযায়ী ডেটা সাজানোর জন্য ব্যবহার করা হয়।


OrderBy এর উদাহরণ

ধরা যাক, আমাদের একটি Customer ক্লাস রয়েছে এবং আমরা Customer লিস্টের মধ্যে Age ফিল্ড অনুযায়ী ক্রমবর্ধমানভাবে সাজাতে চাই:

public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Customer> customers = new List<Customer>
{
    new Customer { Name = "Alice", Age = 30 },
    new Customer { Name = "Bob", Age = 25 },
    new Customer { Name = "Charlie", Age = 35 }
};

// OrderBy ব্যবহার করে Ascending Order এ সাজানো
var orderedCustomers = customers.OrderBy(c => c.Age);

foreach (var customer in orderedCustomers)
{
    Console.WriteLine($"{customer.Name}, Age: {customer.Age}");
}

আউটপুট:

Bob, Age: 25
Alice, Age: 30
Charlie, Age: 35

এখানে OrderBy Age অনুযায়ী Ascending Order-এ ডেটা সাজাচ্ছে।


OrderByDescending

OrderByDescending কুয়েরি অপারেটর ডেটাকে Descending Order বা বড় থেকে ছোট (বেশি থেকে কম) সাজানোর জন্য ব্যবহৃত হয়।


OrderByDescending এর উদাহরণ

ধরা যাক, এবার আমরা Age ফিল্ড অনুযায়ী ডেটাকে Descending Order-এ সাজাতে চাই:

// OrderByDescending ব্যবহার করে Descending Order এ সাজানো
var orderedCustomersDesc = customers.OrderByDescending(c => c.Age);

foreach (var customer in orderedCustomersDesc)
{
    Console.WriteLine($"{customer.Name}, Age: {customer.Age}");
}

আউটপুট:

Charlie, Age: 35
Alice, Age: 30
Bob, Age: 25

এখানে OrderByDescending Age অনুযায়ী Descending Order-এ ডেটা সাজাচ্ছে, অর্থাৎ বড় থেকে ছোট।


একাধিক শর্তে অর্ডারিং

কখনও কখনও, একাধিক শর্তে ডেটা সাজানো প্রয়োজন হয়, যেমন প্রথমে একটি ফিল্ডের উপর এবং তারপর অন্য একটি ফিল্ডের উপর অর্ডারিং করা। LINQ এ একাধিক শর্তে অর্ডারিং করার জন্য ThenBy এবং ThenByDescending ব্যবহার করা যায়।

OrderBy এবং ThenBy ব্যবহার করে একাধিক শর্তে অর্ডারিং:

var orderedCustomersMulti = customers
    .OrderBy(c => c.Age)                // প্রথমে Age অনুযায়ী Ascending Order
    .ThenBy(c => c.Name);                // এরপর Name অনুযায়ী Ascending Order

foreach (var customer in orderedCustomersMulti)
{
    Console.WriteLine($"{customer.Name}, Age: {customer.Age}");
}

আউটপুট:

Bob, Age: 25
Alice, Age: 30
Charlie, Age: 35

এখানে প্রথমে Age অনুযায়ী Ascending Order-এ সাজানো হয়েছে, এবং তারপর Name অনুযায়ী Ascending Order-এ সাজানো হয়েছে।


OrderBy এবং OrderByDescending এর সুবিধা

  • সহজ ব্যবহার: OrderBy এবং OrderByDescending ব্যবহার করা খুবই সহজ, এবং ডেটাকে খুব দ্রুত নির্দিষ্ট ক্রমে সাজাতে সহায়ক।
  • Deferred Execution: LINQ-এর Deferred Execution সুবিধা থাকায়, কুয়েরি তখনই এক্সিকিউট হয় যখন তার ফলাফল প্রয়োজন হয়, যা ডেটাবেস অপ্টিমাইজেশনের জন্য সহায়ক।
  • একাধিক ফিল্ডে সাজানো: ThenBy এবং ThenByDescending ব্যবহার করে একাধিক ফিল্ডে সজ্জন করা যায়।

উপসংহার

OrderBy এবং OrderByDescending LINQ-এ ডেটাকে ক্রম অনুযায়ী সাজানোর দুটি মূল অপারেটর। এগুলি Ascending এবং Descending অর্ডারে ডেটা সাজাতে ব্যবহৃত হয়, এবং একাধিক শর্তে সাজাতে ThenByThenByDescending ব্যবহার করা যায়। এগুলি LINQ কুয়েরি অপারেশনগুলোকে আরও শক্তিশালী এবং কার্যকরী করে তোলে।

common.content_added_by

গ্রুপিং ডেটা (Group By)

171
171

LINQ to DataSet এ Group By অপারেটর ব্যবহার করে আপনি ডেটাকে নির্দিষ্ট একটি বা একাধিক কন্ডিশনের উপর গ্রুপ করতে পারেন। এটি SQL-এর GROUP BY এর সমান, যেখানে আপনি ডেটাকে একটি নির্দিষ্ট ফিল্ড বা কন্ডিশনের মাধ্যমে গ্রুপ করেন এবং তারপর প্রতিটি গ্রুপের উপর কোনো অপারেশন যেমন Sum, Count, Average ইত্যাদি প্রয়োগ করতে পারেন।

LINQ-এর group by ক্লজ ব্যবহার করে DataTable বা DataSet-এর ডেটা গ্রুপ করা যায় এবং এই গ্রুপগুলির উপর বিভিন্ন ধরনের অ্যাগ্রিগেট ফাংশনও প্রয়োগ করা সম্ভব।


LINQ to DataSet-এ Group By এর ব্যবহার

১. একটি কলামের উপর গ্রুপিং (Group By Single Column):

ধরা যাক, আপনার কাছে একটি পণ্য (Product) সম্পর্কিত ডেটা রয়েছে এবং আপনি সেই ডেটা পণ্যের Category অনুযায়ী গ্রুপ করতে চান।

using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        // DataTable তৈরি
        DataTable dt = new DataTable("Products");
        dt.Columns.Add("ProductID", typeof(int));
        dt.Columns.Add("ProductName", typeof(string));
        dt.Columns.Add("Category", typeof(string));
        dt.Columns.Add("Price", typeof(decimal));

        // DataTable-এ ডেটা ইনসার্ট করা
        dt.Rows.Add(1, "Product1", "Category1", 20.5);
        dt.Rows.Add(2, "Product2", "Category1", 30.0);
        dt.Rows.Add(3, "Product3", "Category2", 15.5);
        dt.Rows.Add(4, "Product4", "Category2", 25.0);

        // LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং করা
        var groupedProducts = from product in dt.AsEnumerable()
                              group product by product.Field<string>("Category") into productGroup
                              select new
                              {
                                  Category = productGroup.Key,
                                  Products = productGroup
                              };

        // গ্রুপড ডেটা প্রিন্ট করা
        foreach (var group in groupedProducts)
        {
            Console.WriteLine($"Category: {group.Category}");
            foreach (var product in group.Products)
            {
                Console.WriteLine($" - {product.Field<string>("ProductName")}: {product.Field<decimal>("Price")}");
            }
        }
    }
}

আউটপুট:

Category: Category1
 - Product1: 20.5
 - Product2: 30
Category: Category2
 - Product3: 15.5
 - Product4: 25

এখানে Category কলামের ভিত্তিতে পণ্যগুলো গ্রুপ করা হয়েছে, এবং তারপর প্রতিটি গ্রুপের পণ্যগুলোর নাম ও মূল্য প্রদর্শিত হয়েছে।

২. গ্রুপিং এবং অ্যাগ্রিগেট ফাংশন (Group By with Aggregate Functions):

আপনি group by এর সাথে Sum, Count, Average ইত্যাদি অ্যাগ্রিগেট ফাংশন ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো যেখানে Category অনুসারে গ্রুপিং করার পর প্রতিটি গ্রুপের মোট মূল্য (Sum) হিসাব করা হয়েছে।

using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        // DataTable তৈরি
        DataTable dt = new DataTable("Products");
        dt.Columns.Add("ProductID", typeof(int));
        dt.Columns.Add("ProductName", typeof(string));
        dt.Columns.Add("Category", typeof(string));
        dt.Columns.Add("Price", typeof(decimal));

        // DataTable-এ ডেটা ইনসার্ট করা
        dt.Rows.Add(1, "Product1", "Category1", 20.5);
        dt.Rows.Add(2, "Product2", "Category1", 30.0);
        dt.Rows.Add(3, "Product3", "Category2", 15.5);
        dt.Rows.Add(4, "Product4", "Category2", 25.0);

        // LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং এবং মোট মূল্য বের করা
        var groupedProducts = from product in dt.AsEnumerable()
                              group product by product.Field<string>("Category") into productGroup
                              select new
                              {
                                  Category = productGroup.Key,
                                  TotalPrice = productGroup.Sum(p => p.Field<decimal>("Price"))
                              };

        // গ্রুপড ডেটার মোট মূল্য প্রিন্ট করা
        foreach (var group in groupedProducts)
        {
            Console.WriteLine($"Category: {group.Category}, Total Price: {group.TotalPrice}");
        }
    }
}

আউটপুট:

Category: Category1, Total Price: 50.5
Category: Category2, Total Price: 40.5

এখানে প্রতিটি Category এর জন্য পণ্যের মোট মূল্য হিসাব করা হয়েছে।

৩. গ্রুপিং এবং Count ফাংশন (Group By with Count):

আপনি Count ফাংশনও ব্যবহার করতে পারেন গ্রুপের মধ্যে কতটি রেকর্ড আছে তা গণনা করতে।

using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        // DataTable তৈরি
        DataTable dt = new DataTable("Products");
        dt.Columns.Add("ProductID", typeof(int));
        dt.Columns.Add("ProductName", typeof(string));
        dt.Columns.Add("Category", typeof(string));
        dt.Columns.Add("Price", typeof(decimal));

        // DataTable-এ ডেটা ইনসার্ট করা
        dt.Rows.Add(1, "Product1", "Category1", 20.5);
        dt.Rows.Add(2, "Product2", "Category1", 30.0);
        dt.Rows.Add(3, "Product3", "Category2", 15.5);
        dt.Rows.Add(4, "Product4", "Category2", 25.0);

        // LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং এবং প্রতি গ্রুপে পণ্যের সংখ্যা বের করা
        var groupedProducts = from product in dt.AsEnumerable()
                              group product by product.Field<string>("Category") into productGroup
                              select new
                              {
                                  Category = productGroup.Key,
                                  ProductCount = productGroup.Count()
                              };

        // গ্রুপড ডেটার পণ্যের সংখ্যা প্রিন্ট করা
        foreach (var group in groupedProducts)
        {
            Console.WriteLine($"Category: {group.Category}, Product Count: {group.ProductCount}");
        }
    }
}

আউটপুট:

Category: Category1, Product Count: 2
Category: Category2, Product Count: 2

এখানে প্রতিটি Category এর মধ্যে কতটি পণ্য আছে তা গুনে দেখানো হয়েছে।


সারাংশ

LINQ to DataSet-এ Group By অপারেটর ব্যবহার করে আপনি DataTable বা DataSet এর ডেটাকে একটি বা একাধিক কলামের ভিত্তিতে গ্রুপ করতে পারেন এবং তারপর সেই গ্রুপগুলির উপর অ্যাগ্রিগেট ফাংশন প্রয়োগ করতে পারেন, যেমন Sum, Count, Average ইত্যাদি। এটি আপনাকে ডেটাকে বিশ্লেষণ করতে এবং বিভিন্ন গ্রুপের তথ্য একত্রিত করতে সহায়ক।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion